<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>


    // Symbol  大整数（BigInt） ES6新增的数据类型

    // BigInt
    // JavaScript 所有数字都保存成 64 位浮点数，这给数值的表示带来了两大限制。一是数值的精度只能到 53 个二进制位（相当于 16 个十进制位），大于这个范围的整数，JavaScript 是无法精确表示，这使得 JavaScript 不适合进行科学和金融方面的精确计算。二是大于或等于2的1024次方的数值，JavaScript 无法表示，会返回Infinity。


    // var a = Math.pow(2, 53);
    // var b = Math.pow(2, 53) + 1;

    // console.log(a);
    // console.log(b);
    // console.log(a == b);

    // console.log(Math.pow(2, 1024));

    // ES2020 引入了一种新的数据类型 BigInt（大整数），来解决这个问题，这是 ECMAScript 的第八种数据类型。BigInt 只用来表示整数，没有位数的限制，任何位数的整数都可以精确表示。
    // 为了与 Number 类型区别，BigInt 类型的数据必须添加后缀n。

    // 大整数
    var a = 2172141653n;
    var b = 15346349309n;
    var c = a * b;
    // console.log(c);

    // console.log(Math.pow(2n, 53n));   //报错
    // console.log(2n ** 53n);
    // console.log(2n ** 53n + 1n);
    // console.log(2n ** 1024n);
    // console.log(2n ** 1024n + 1n);

    // document.write(2n ** 1024n)

    // number
    // var a = 2172141653;
    // var b = 15346349309;
    // var c = a * b;
    // console.log(c);

    // console.log(Math.pow(2, 53));
    // console.log(Math.pow(2, 53) + 1);


    // BigInt()  强制将其他类型转化bigInt
    console.log(BigInt(100));
    console.log(BigInt("200"));  // 纯数字类型的字符串
    // console.log(BigInt("200a"));  // 报错
    console.log(BigInt(true));
    console.log(BigInt(false));
    // console.log(BigInt(null));  // 报错
    // console.log(BigInt(undefined));  // 报错

    // BigInt 强制转 number string boolean
    var a = 1n;
    console.log(Number(a));
    console.log(String(a));
    console.log(Boolean(a));

    var a = 0n;
    console.log(Number(a));
    console.log(String(a));
    console.log(Boolean(a));







</script>

</html>